The present invention generally relates to an apparatus and a computerized method for automated integrated circuit design. More particularly, the present invention relates to an apparatus and a computerized method for finding errors in programming code of declarative languages, which are used for automated integrated circuit design and automated integrated circuit design verification.
Integrated circuit (IC) design has been automated with IC design software. IC design software has aided in reducing the amount of human labor involved in generating designs for ICs. Once a design for an IC is generated by the IC design software, the design is typically verified by one or more verification programs. Verification is a process of determining whether the design will work properly for its intended purpose. That is, verification is a process of determining whether the design meets the design specifications. Both design generation and design verification are typically highly computer intensive processes. Designs for ICs may be generated and verified using tens, hundreds, or more computers on a computer farm running. Verification programs are often written specifically to verify a given design. Errors in the various computer codes for a design and of the verification programs used to verify the design often significantly delays the verification of the design.
Different types of programming languages are used for generating IC designs and for the verification programs that verify the designs. One particular class of programming languages, referred to as the declarative languages, is often used for generating IC designs and for verification programs. Examples of declarative languages include VERILOG, HDL (hardware descriptive language), and the like. In the electronics field, for example, HDL includes languages from a class of computer languages and/or programming languages configured for formal description of digital logic and electronic circuits. HDL may describe the circuit's operation, its design and organization, and tests to verify its operation by means of simulation. HDLs typically include standard text-based expressions of the spatial and temporal structure and behavior of electronic systems. HDLs are used to write executable specifications of some piece of hardware. A simulation program, designed to implement the underlying semantics of the language statements, coupled with simulating the progress of time, provides the hardware designer with the ability to model a piece of hardware before it is created physically.
Declarative languages, such as HDLs, typically have a relatively simple syntax. Due to the relatively simple syntax of declarative languages, numerous sequential lines of computer code are often repeated. Programmers generating computer code in a declarative language typically type one or more lines of computer code and then cut and paste these few lines of computer code repeatedly to write an extended portion of a computer program. This repetitive cut and paste process typically introduces numerous typographical errors that are difficult to locate by looking at the code. More specifically, the lines of computer code of declarative languages often have indices (e.g., numbers and/or symbols) that vary, but the indices are located inside and adjacent to extended portions of text. Detecting errors in the indices by visual inspection often proves difficult.
Programs called linters are often written and used to scan for errors in the computer program codes for both designs and verification programs. The linters analyze the computer program code to identify known errors and report these errors to designers via the designers computer stations. The errors in the code may be fixed before the computer program code is executed so that the errors do not need to be located while the program is running (often referred to as debugging). The use of linters ease the burden on designers and programmers to find their own typographical errors. While linters have been successful at locating certain types of errors in computer program code, other errors are not so easily located.
Therefore, there is a need for an apparatus and method to locate the errors, which are common in freshly written programming code for declarative languages (or other type of repetitive syntax computer languages), and provide guidance to a programmer to aid the programmer to locate and fix the errors.